package cn.xsly.system.service.impl;

import cn.xsly.system.domain.Menu;
import cn.xsly.system.mapper.MenuMapper;
import cn.xsly.system.service.IMenuService;
import cn.xsly.basic.service.impl.BaseServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 业务实现类：
 */
@Service
public class MenuServiceImpl extends BaseServiceImpl<Menu> implements IMenuService {
    @Autowired
    private MenuMapper menuMapper;

    @Override
    public List<Menu> menuTree() {
        //1.先将所有的菜单装到map集合中：方便根据id找对象
        Map<Long,Menu> menuMap = new HashMap<>();
        List<Menu> menus = menuMapper.findAll();
        for (Menu menu : menus) {
            menuMap.put(menu.getId(),menu);
        }

        List<Menu> menuTree = new ArrayList<>();
        //2.遍历所有的菜单
        for (Menu menu : menus) {
            if(menu.getParentId()==null){
                //2.1.如果是顶级菜单【parent_id==null】,添加到menuTree中
                menuTree.add(menu);
            }else{
                //2.2.如果不是一级菜单【parent_id!=null】,找父菜单，将自己装进父菜单【父菜单要准备一个集合装子菜单】
                Long parentId = menu.getParentId();
                Menu parentMenu = menuMap.get(parentId);
                parentMenu.getChildren().add(menu);
            }
        }
        return menuTree;
    }
}
